package main

import (
	"fmt"
	"reflect"
)

// 定义学生结构体
type Student struct {
	Name string
	Age  int
}

func testRefect3(i interface{}) {
	// 调用TypeOf函数,返回reflect.Type类型的数据
	reType := reflect.TypeOf(i)
	// 调用ValueOf函数,返回reflect.Value类型数据
	reValue := reflect.ValueOf(i)
	// 通过reType获取变量的类别
	kind := reType.Kind()
	fmt.Println(kind) // struct
	// 通过reValue获取,类别是否一样
	kind2 := reValue.Kind()
	fmt.Println(kind2) //struct

	// 获取变量的类型
	// reValue转成空接口
	a := reValue.Interface()
	student, flag := a.(Student)
	if flag { // 断言成功的话
		fmt.Printf("结构体类型:%T", student) //结构体类型:main.Student
	}

}
func main() {
	student := Student{
		Name: "二狗",
		Age:  18,
	}
	testRefect3(student)
}
